VisualHMI - 分期应用

什么是分期?

image-20231205092317319

当设备处于试用阶段,终端分期试用时,VisualHMI 则在设定的时间上,自动锁屏,用户无法正常控制设备运行。需要供应商告诉用户密码,输入正确后,用户则可照常使用。

使用范围:VisualHMI - HMI&M系列

应用下载:VisualHMI - 分期应用(点击下载)

1. 分期使用

当前系统时间到截止分期时间,HMI会弹出分期密码输入的画面,用户输入该期的分期密码后,才可以继续正常使用。否者,一直锁定在分期密码输入画面。

如当前系统时间2023-10-01 00:00:00,第一期时间为2023-11-01,则需要输入第一期的密码,第一期输入密码的时间段为当前时间~2023-01-01。

1.1 属性说明

点击菜单栏中【工程】→【工程设置】分期使用,属性说明如下所示:

image-20231205093329936

  1. 启用分期:使能后才支持分期功能

  2. 分期数:最大支持10个分期

  3. 到期锁定画面ID:填入对应的画面ID

  4. 到期日:假设当前HMI的时间小于 分期1(2023/1/1)。则到分期1时间截止前,需要输入密码才可以使用

  5. 密码:各个分期时间的密码

1.2 系统寄存器

分期相关系统寄存器,其中SysStageTimeLevel 为索引,数值范围0~9, 如下所示:

image-20231205104946115

2.应用

2.1.分期配置

点击菜单栏中【工程】→【工程设置】分期使用,配置如下所示:

  1. 启动分期:√

  2. 分期数:5

  3. 到期锁定画面ID:1

  4. 第1期到期日和密码:2023/11/1,1111

  5. 第2期到期日和密码:2023/12/1,2222
  6. 第3期到期日和密码:2024/1/1,3333
  7. 第4期到期日和密码:2024/2/1,4444
  8. 第5期到期日和密码:2024/3/1,5555

image-20231205111955044

2.2.锁定配置

2.2.1.画面配置

“分期锁定”界面,添加一个数值控件,用来密码输入,属性如下所示:

  1. 启用输入:√

    • 键盘类型:弹出键盘

    • 键盘画面:100_digit320*240

  2. 读取地址:$SysStageEnterPwd(LW0205)

  3. 数据类型:UINT32

image-20231205110842911

“分期锁定”界面,添加一个数值控件,用来表示输入第几期密码,属性如下所示:

  1. 读取地址:$SysStageTimeLevel(LW0204)

  2. 数据类型:UINT16

  3. 特殊转换:√

    • 缩放:1

    • 偏移:1

image-20231205110936298

2.2.2.运行预览

编辑下载到屏幕,假设当前屏幕时间为2023/12/5号,需要输入第3期2024/1/1号的密码,如下所示:

Video_2023-12-05_113454

2.3.分期时间

2.3.1.工程配置

分期时间,添加5个RTC控件,属性配置如下所示:

  1. 日期:YYYY/MM/DD;

  2. 星期:不显示;

  3. 时间:不显示;

  4. 设置时间:点击进入;

    • 模式:日期;

    • 使用时间戳:√;

  5. 读写地址:LW0210/LW0212/LW0214/LW0216/LW0218

image-20231205114517981

2.3.2.LUA脚本

修改时间掉电存储,需要LUA脚本设置系统配置寄存器SysCfgCtrl(0x011A)、SysCfgOption(0x011B),如下所示:

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1000
        then
           ......

        elseif addr >= 0x0210 and addr <= 0x0218 --分期时间地址,此处共5个分期,地址LW0210/LW0212/LW0214/LW0216/LW0218
        then
            set_uint16(VT_LW, 0x011B, (1<<5))-- 选择分期密码
            set_uint16(VT_LW, 0x011A, 0x5501)-- 保存
        end
    end
end

2.3.3.下载运行

实体屏上测试,虚拟屏不支持

2.4.分期密码

分期密码不支持读取,修改需要通过LUA脚本,set_stage_pwd(level,pwd)

set_stage_pwd(level,pwd):修改分期密码

  • level: 用户等级0~9,对应分期1~分期10
  • pwd: 用户数字密码

用户修改密码或初始化时候,可以将密码写到RW寄存器,修改后时查看当前密码

2.4.1.工程配置

画面上添加5个数值控件,用于修改分期密码的接口,配置如下所示:

  1. 启用输入:√

  2. 读取地址:RW0000/RW0002/RW0004/RW0006/RW0008

  3. 数据类型:UINT32

image-20231205134613985

2.4.2.LUA脚本

屏幕首次使用,可以分期配置的密码写入Flash中。新的Flash里的内容都是0xFF,LUA脚本可以读取一个地址(0x000A~0x7FFF,历程中已用了0x0000~0x0008),用来判读初始化寄存器的标识。

初始化分期密码:

function on_init()

    local _val = get_uint16(VT_RW, 0x2000)
    if _val ~= 0x0055
    then
        --和分期设置的初始密码一致
        set_uint32(VT_RW, 0x0000, 1111)
        set_uint32(VT_RW, 0x0002, 2222)
        set_uint32(VT_RW, 0x0004, 3333)
        set_uint32(VT_RW, 0x0006, 4444)
        set_uint32(VT_RW, 0x0007, 5555)

        set_uint16(VT_RW, 0x2000, 0x0055)
    end

    set_uint16(VT_LW, 0x011B, (1<<5)) -- 选择分期密码
    set_uint16(VT_LW, 0x011A, 0x5502) -- 加载,从set_stage_pwd后的密码加载
end

修改分期密码,在on_updata(...)回调函数里面,判断RW寄存器触发,将寄存器的值设置对应的分期密码,并存储。


function on_update(slave,vtype,addr)

    ......
    if vtype == VT_RW
    then
        if addr >= 0x0000 and addr <= 0x0008
        then
            local psw = get_uint32(vtype, addr)
            local idx = (addr // 0x0002) + 1
            set_stage_pwd(idx, psw) -- 设置对应等级密码

            set_uint16(VT_LW, 0x011B, (1<<5))-- 选择分期密码
            set_uint16(VT_LW, 0x011A, 0x5501)-- 保存

        end
    end
end

2.4.3.下载运行

实体屏上测试,虚拟屏不支持

2.5.恢复分期

修改了分期时间或密码,还可以恢复到工程分期配置的初始数据

2.5.1.工程配置

画面添加一个字设置按钮,用于触发恢复分期设置,配置如下所示:

  1. 写入地址:LW1000

  2. 写入常量:0

    • 常量值:0

image-20231205141500857

2.5.2.LUA脚本

在on_updata函数里面,检测到LW1000地址写入1,设置SysCfgCtrl(0x011A)、SysCfgOption(0x011B)寄存器清除分期数据,并设置RW寄存器,如下所示

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1000
        then
            local key = get_uint16(VT_LW, addr)
            if key == 1
            then
                set_uint16(VT_LW, 0x011B, (1<<5))-- 选择分期密码
                set_uint16(VT_LW, 0x011A, 0x5503)-- 恢复

                --设置RW寄存器原分期密码
                set_uint32(VT_RW, 0x0000, 1111)
                set_uint32(VT_RW, 0x0002, 2222)
                set_uint32(VT_RW, 0x0004, 3333)
                set_uint32(VT_RW, 0x0006, 4444)
                set_uint32(VT_RW, 0x0007, 5555)
            end
        end
    end
end

2.5.3.下载运行

实体屏上测试,虚拟屏不支持

2.6.分期开关

分期可以动态设置开启、关闭。如用户结清余款,可以一键关闭分期功能

2.6.1.工程配置

画面中添加一个位状态指示灯,用于分期的开启、关闭。控件配置如下所示:

image-20231205153557111

2.6.2.LUA脚本

在on_updata(...)回调函数里面,判断LW1000寄存器触发,设置分期组数并存储。

function on_update(slave,vtype,addr)
    if vtype == VT_LW
    then
        if addr == 0x1000
        then
            ......
        elseif addr == 0x1001
        then
            local key = get_uint16(VT_LW, addr)
            if key == 0
            then
                set_uint16(VT_LW, 0x0200, 0)     -- 设置分期数0
                set_uint16(VT_LW, 0x011B, (1<<5))-- 选择分期密码
                set_uint16(VT_LW, 0x011A, 0x5501)-- 保存
            elseif key == 1
            then
                set_uint16(VT_LW, 0x0200, 1)     -- 设置分期数1
                set_uint16(VT_LW, 0x011B, (1<<5))-- 选择分期密码
                set_uint16(VT_LW, 0x011A, 0x5501)-- 保存
            end
        end
    end
end

2.5.3.下载运行

实体屏上测试,虚拟屏不支持

Copyright ©Dacai all right reserved,powered by Gitbook该文件修订时间: 2024-11-12 15:22:30

results matching ""

    No results matching ""